查看原文
其他

NLTK,全面的Python基础NLP库

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:王思雨 中南财经政法大学金融学院  

本文编辑:何   疆

技术总编:温和铭








Stata and Python 数据分析

     爬虫俱乐部将于2023年8月1日至9日河南大学(河南开封)举行Stata编程技术Python编程技术定制培训,同时在网络平台进行直播,提供线上学习的方式。线上线下培训均有专门的答疑团队。大家感兴趣请点击推文链接《爬虫俱乐部2023第一期编程训练营开始报名啦!》点击文末阅读原文查看课程详情及报名方式!

导读

NLTK(Natural Language Toolkit)是一种用于自然语言处理(NLP)的Python库。它提供了一系列用于处理人类语言数据的工具和资源,包括文本预处理、语言模型、语言分析、分类、标注、语料库和语言数据集等。

安装

pip install nltk

接下来可以使用nltk.download()函数下载需要的语料库和模型文件。如果在运行时报错,可以进入网址https://github.com/nltk/nltk_data下载相关数据数据,通过下载packages文件夹中的文件,并将packages文件夹下的所有子文件夹复制至下图所示的路径中,即可解决。

具体应用

文本处理

使用NLTK提供的函数和工具能够对文本进行预处理,主要包括分词、去除停用词以及词性标注等,下面将详细介绍NLTK工具文本处理的流程。

首先导入模块以及函数,并将要处理的文本输入到Python中:

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk import pos_tag #导入模块以及函数
text = "I really enjoy the movie called Lost In The Stars. It is amazing."

接下来对导入的文本进行处理,并查看预处理后的文本数据和结果:

tokens = word_tokenize(text) # 分词
print(tokens)
stop_words = set(stopwords.words('english')) #去除停用词
tokens = [token for token in tokens if token.casefold() not in stop_words]
tags = pos_tag(tokens) #词性标注
print(tags)

其中,RB表示副词(Adverb),VB表示动词原型(Verb Base Form),NN表示名词(noun),VBN表示动词过去分词(Verb, Past Participle),NNP表示专有名词(Proper Noun, Singular),而.表示标点符号(punctuation)。

信息提取

在对文本进行基本处理后,可以利用NLTK进行名词短语信息提取,首先我们定义语法规则:

from nltk import RegexpParser
grammar = r"""
NP: {<DT>?<JJ>*<NN.*>+}
"""
#定义语法规则

其中,<DT>表示定冠词,<JJ>表示形容词,<NN.*>表示任何类型的名词。这个规则表示一个名词短语由可选的定冠词、任意数量的形容词和一个名词组成。

然后,我们创建一个正则表达式分块器,使用它来解析文本,并将它们组合成一个字符串,作为提取出的名词短语:

chunk_parser = RegexpParser(grammar)
tree = chunk_parser.parse(tags)
noun_phrases = []
for subtree in tree.subtrees():
if subtree.label() == 'NP':
np = ' '.join([word for word, tag in subtree.leaves()])
noun_phrases.append(np)
print("Extracted noun phrases:", noun_phrases)

最终提取出了 "movie" 、 "Lost Stars" 和"amazing"三个名词短语。

情感分析

利用NLTK还可以对文本的情感进行分析,首先在Python代码中导入NLTK库和情感词典,并使用NLTK提供的情感分析器SentimentIntensityAnalyzer创建一个情感分析器对象:

from nltk.sentiment.vader import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()

接下来对文本进行情感分析,使用情感分析器的polarity_scores()方法对文本进行情感分析,并查看情感分析结果:

scores = analyzer.polarity_scores(text)
print(scores)

其中,'neg'表示负面情感的得分,'neu'表示中性情感的得分,'pos'表示正面情感的得分,'compound'表示综合情感得分。在这个例子中,综合情感得分为0.7178,表示这段文本是积极的。

自然语言生成

同样NLTK提供了一些自然语言生成的工具和技术,包括基于规则的方法、模板方法和基于机器学习的方法等。下面将基于模板的方法生成句子,首先定义一个句子生成的模板:

template = "The {adjective}{noun}{verb}{adverb}."

接着,定义一个函数,从给定的词汇列表中随机选择一个词,并将其插入到模板中,生成一个完整的句子:

import random
def generate_sentence(template, adjectives, nouns, verbs, adverbs):
adjective = random.choice(adjectives)
noun = random.choice(nouns)
verb = random.choice(verbs)
adverb = random.choice(adverbs)
sentence = template.format(adjective=adjective, noun=noun, verb=verb, adverb=adverb)
return sentence

最后,通过自定义词汇列表并调用函数生成句子:

adjectives = ["happy", "sad", "angry", "excited", "calm", "crazy", "brave", "shy", "smart", "funny"]
nouns = ["cat", "dog", "book", "computer", "phone", "car", "tree", "house", "city", "music"]
verbs = ["runs", "jumps", "reads", "writes", "talks", "listens", "dances", "learns", "thinks", "dreams"]
adverbs = ["quickly", "slowly", "loudly", "quietly", "happily", "sadly", "angrily", "excitedly", "calmly", "crazily"]
sentence = generate_sentence(template, adjectives, nouns, verbs, adverbs)
print(sentence)

这样就通过使用一个简单的模板和一些词汇列表,生成了一个随机的句子。生成结果如下:

以上就是部分关于NLTK的使用方法,快来试⼀试吧~

END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐爬取A股上市公司指定年份年报
机器学习——监督学习入门‍‍禁忌魔法解封,击穿专业壁垒:ChatGPT code interpreter暑期来啦~⼀起看⼀看近期的天⽓情况【命令重磅更新】在Stata中深入使用ChatGPT
爬虫俱乐部2023第一期编程训练营开始报名啦!
【爬虫基础】Scrapy爬虫框架迈向交互式编程,ChatGPT更新!一个简单又好玩的Python库——MyQR
replace命令的“加强版”!——如何使用ereplace,结合egen
XML 轻松读取:用 Python 发现数据宝藏

爬虫俱乐部重磅推出cnstata.com.cn

Markdown:让数学公式输入更方便!

处理日期的好手:pendulum
定制属于自己的“贾维斯”——Python调用Chat
学会format,数据格式任你拿捏【Python实战】游客最青睐的城市,你的家乡上榜了吗?

What’ new ? 速通Stata 18

【爬虫实战】Python爬取美食菜谱揭秘网络中心人物,你会是其中之一吗?     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存